/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package data;

import java.sql.*;
import java.util.LinkedList;
import javax.xml.registry.infomodel.User;
import utils.Tabelas;
import utils.Transaction;

/**
 *
 * @author Felipe
 */
public class UserData {

    public static void incluir(UserDO user, Transaction tr) throws Exception {
        Connection con = tr.getConnection();
        String sql = "insert into " + Tabelas.USER + "(email,cpf,senha,nome,"
                + "sobrenome,data_nasc,sexo,ddd,tel,estado_civil,"
                + "n_pessoas_residencia,renda,tipo_moradia,educacao,profissao)"
                + " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setString(1, user.getEmail());
        ps.setLong(2, user.getCpf());
        ps.setString(3, user.getSenha());
        ps.setString(4, user.getNome());
        ps.setString(5, user.getSobrenome());
        ps.setDate(6, user.getData_nasc());
        System.out.println(user.getData_nasc());
        ps.setBoolean(7, user.getSexo());
        ps.setInt(8, user.getDdd());
        ps.setInt(9, user.getTel());
        ps.setString(10, user.getEstado_civil());
        ps.setInt(11, user.getN_pessoas_residencia());
        ps.setDouble(12, user.getRenda());
        ps.setInt(13, user.getTipo_moradia());
        ps.setInt(14, user.getEducacao());
        ps.setString(15, user.getProfissao());

        int result = ps.executeUpdate();

    }

    public void editar(UserDO user, Transaction tr) throws Exception {
        Connection con = tr.getConnection();
        String sql = "update " + Tabelas.USER + " set email = ?,cpf = ?,"
                + "senha = ?,nome = ?,"
                + "sobrenome = ?,data_nasc = ?,sexo = ?,ddd = ?,tel = ?,"
                + "estado_civil = ?,"
                + "n_pessoas_residencia = ?,renda = ?,tipo_moradia = ?,"
                + "educacao = ?,profissao = ?";
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setString(1, user.getEmail());
        ps.setLong(2, user.getCpf());
        ps.setString(3, user.getSenha());
        ps.setString(4, user.getNome());
        ps.setString(5, user.getSobrenome());
        ps.setDate(6, user.getData_nasc());
        ps.setBoolean(7, user.getSexo());
        ps.setInt(8, user.getDdd());
        ps.setInt(9, user.getTel());
        ps.setString(10, user.getEstado_civil());
        ps.setInt(11, user.getN_pessoas_residencia());
        ps.setDouble(12, user.getRenda());
        ps.setInt(13, user.getTipo_moradia());
        ps.setInt(14, user.getEducacao());
        ps.setString(15, user.getProfissao());
        ps.setInt(16, user.getId());

        int result = ps.executeUpdate();

    }
    /* --------------------------------- */
    /* Incluído por Joao em 20/11/2011 */
    /* --------------------------------- */
    public void excluir(Integer id, Transaction tr) throws Exception {
  
        Connection con = tr.getConnection();
        String sql = "delete from " + Tabelas.PONTUACAO + " where user_id=?";
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setInt(1,id);
        int result = ps.executeUpdate();
        sql = "delete from " + Tabelas.RESGATE_PONTOS + " where user_id=?";
        ps = con.prepareStatement(sql);
        ps.setInt(1,id);
        result = ps.executeUpdate();
        sql = "delete from " + Tabelas.USER + " where id=?";
        ps = con.prepareStatement(sql);
        ps.setInt(1,id);
        result = ps.executeUpdate();
    }
    
    public UserDO buscar(String email, String senha, Transaction tr) throws Exception {
        Connection con = tr.getConnection();
        String sql = "select * from " + Tabelas.USER + " where (email=? "
                + "and senha=?)";
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setString(1, email);
        ps.setString(2, senha);
        ResultSet rs = ps.executeQuery();
        rs.next();
        UserDO usuario = new UserDO();
        usuario.setId(rs.getInt("id"));
        usuario.setEmail(rs.getString("email"));
        usuario.setCpf(rs.getLong("cpf"));
        usuario.setSenha(rs.getString("senha"));
        usuario.setNome(rs.getString("nome"));
        usuario.setSobrenome(rs.getString("sobrenome"));
        usuario.setData_nasc(rs.getDate("data_nasc"));
        usuario.setSexo(rs.getBoolean("sexo"));
        usuario.setDdd(rs.getInt("ddd"));
        usuario.setTel(rs.getInt("tel"));
        usuario.setEstado_civil(rs.getString("estado_civil"));
        usuario.setN_pessoas_residencia(rs.getInt("n_pessoas_residencia"));
        usuario.setRenda(rs.getDouble("renda"));
        usuario.setTipo_moradia(rs.getInt("tipo_moradia"));
        usuario.setEducacao(rs.getInt("educacao"));
        usuario.setProfissao(rs.getString("profissao"));

        return usuario;
    }

    /* --------------------------------- */
    /* Incluído por Andrey em 13/11/2011 */
    /* --------------------------------- */
    public static UserDO consultar(int user_id, Transaction tr)
            throws Exception {
        UserDO u = new UserDO();
        Connection con = tr.getConnection();
        String sql = "SELECT * FROM " + Tabelas.USER + " WHERE " + Tabelas.USER_id + " =?;";
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setInt(1, user_id);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            u.setId(user_id);
            u.setEmail(rs.getString(Tabelas.USER_email));
            u.setCpf(rs.getLong(Tabelas.USER_cpf));
            u.setSenha(rs.getString(Tabelas.USER_senha));
            u.setNome(rs.getString(Tabelas.USER_nome));
            u.setSobrenome(rs.getString(Tabelas.USER_sobrenome));
            u.setData_nasc(rs.getDate(Tabelas.USER_data_nasc));
            u.setSexo(rs.getBoolean(Tabelas.USER_sexo));
            u.setDdd(rs.getInt(Tabelas.USER_ddd));
            u.setTel(rs.getInt(Tabelas.USER_tel));
            u.setEstado_civil(rs.getString(Tabelas.USER_estado_civil));
            u.setN_pessoas_residencia(rs.getInt(Tabelas.USER_n_pess_resd));
            u.setRenda(rs.getDouble(Tabelas.USER_renda));
            u.setTipo_moradia(rs.getInt(Tabelas.USER_moradia));
            u.setEducacao(rs.getInt(Tabelas.USER_educacao));
            u.setProfissao(rs.getString(Tabelas.USER_profissao));
        }
        return u;
    }//consultar

    public static LinkedList<Integer> executarQuery(String sql, Transaction tr) throws SQLException {
        LinkedList<Integer> lista = new LinkedList<Integer>();
        Connection con = tr.getConnection();
        PreparedStatement ps = con.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            lista.add(rs.getInt(Tabelas.USER_id));
        }
        return lista;
    }//consultar
}
